class gameScene extends egret.Sprite {

	// 构造器
	public constructor(father) {
		super();

		this.father = father;
		this.addEventListener(egret.Event.ADDED_TO_STAGE, this.addToStage, this);
	}
	// 场景的父容器（main）
	private father;

	addToStage() {
		
		this.$stage.orientation = egret.OrientationMode.LANDSCAPE;
		this.touchEnabled = true;


		// 背景
		let sky = new background();
		this.addChild(sky);

		
		// 云
		// let cloud = new Cloud();
		// this.addChild(cloud);


		// 台阶
		let step = new Step();
		this.addChild(step)

		// 人物
		let p1 = new player();
		this.addChild(p1);

		// UI界面，得分，生命值
		//	 
		let ph = new playHeader();
		ph.x = 0;
		ph.y = 0;
		ph.width = this.$stage.stageWidth;
		this.addChild(ph);


		// // 点击跳跃
		this.addEventListener("touchEnd", function () {
			if (p1["movieState"] !== "roll") {
				p1.jump();
			}
		}, this)


		this.addEventListener(egret.Event.ENTER_FRAME, function () {


			// 第一个台阶
			let s0 = step.$children[0];
			// console.log("s0:",s0)
			// 台阶绝对位置
			let s0p = step.localToGlobal(s0.x, s0.y);

			// 如果人物x已经超过第一个台阶，但还没删除，那就要开始判断第二个台阶
			if (p1.x > s0p.x + s0.width) {
				s0 = step.$children[1];
				s0p = step.localToGlobal(s0.x, s0.y);
			}

			// 台阶与人的判断条件
			let judgeX = ((p1.x + p1.width) >= s0p.x && p1.x <= s0p.x + s0.width);
			let judgeY = ((s0p.y - (p1.y + p1.height)) <= 0 && (s0p.y - (p1.y + p1.height)) >= -30);
			// 人物与石头的判断，true为正常，fasle为撞上
			let stoneX;
			if (s0["prama"].stone) {
				stoneX = ((s0["prama"].stone.x + s0p.x) > p1.x + p1.width || (s0["prama"].stone.x + s0["prama"].stone.width + s0p.x) < p1.x);
				
			} else {
				stoneX = true;
			}

			// 如果人物掉出屏幕则重新
			if (p1.y > this.$stage.stageHeight) {
				console.log("你死了傻逼");
				// p1.rolling                               
				p1.outSide();
				return;
			}


			// 根据判断结果决定人物状态
			if (judgeY && judgeX && p1.autoFall) {
				if (!stoneX) {
					console.log("撞到石头了");
					p1.rolling("", "");
				}
				else if (p1.canRun) {
					// 一般来说都是跑步状态
					p1.autoFall = true;
					egret.Tween.removeTweens(p1);
					p1.running();

				}

				p1.y = (s0p.y - p1.height);


			}
			else {
				// 超出台阶，掉落事件，
				p1.down(0);

			}
			// 得分点判断
			let judgePiont;
			for (var p of s0["prama"].point) {
				// 得分点的绝对位置
				var res = this.aabb(p1, {
					width: p["width"],
					height: p["height"],
					x: parseFloat(s0p.x + p["x"]),
					y: parseFloat(s0p.y + p["y"])
				})
				// console.log("得分了吗", res);

				if (res && p.flag) {
					console.log(p.score.texting.text)
					ph.scoreboard.addScore(p.score.texting.text)
					// 得分后的动画，消失效果，出现分值
					p.flag = false;
					egret.Tween.get(p.image).to({
						scaleX : 1.3,
						scaleY : 1.3,
						alpha : 0,
					}, 200)
					egret.Tween.get(p.score).to({
						y: -80,
						alpha : 1,
					}, 400).to({
						alpha : 0,
					},400)
				}
			}




			// 背景移动
			if (sky.x != 0 && sky.x % 1800 == 0) {
				sky.addToStage();
			}
			sky.x -= 10;





		}, this);

		// ?????
		// this.father.addChild(this);

	}
	// aabb碰撞检测 传入两个对象 相碰返回true 不相碰返回false
	aabb(obj1, obj2) {
		
		// obj1 在 obj2 的右侧
		if (obj1.x >= obj2.x && obj1.x > obj2.x + obj2.width) {
			return false;
		}
		// obj1 在 obj2 的左侧
		else if (obj1.x <= obj2.x && obj1.x + obj1.width < obj2.x) {
			return false;
		}
		// obj1 在 obj2 的下侧
		else if (obj1.y >= obj2.y && obj1.y > obj2.y + obj2.height) {
			return false;
		}
		// obj1 在 obj2 的上侧
		else if (obj1.y <= obj2.y && obj1.y + obj1.height < obj2.y) {

			return false;
		}
		else {
			return true;
		}

	}



}